﻿// //   Copyright 2007-2011 Comdiv (F. Sadykov) - http://code.google.com/u/fagim.sadykov/
// //   Supported by Media Technology LTD 
// //    
// //   Licensed under the Apache License, Version 2.0 (the "License");
// //   you may not use this file except in compliance with the License.
// //   You may obtain a copy of the License at
// //    
// //        http://www.apache.org/licenses/LICENSE-2.0
// //    
// //   Unless required by applicable law or agreed to in writing, software
// //   distributed under the License is distributed on an "AS IS" BASIS,
// //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// //   See the License for the specific language governing permissions and
// //   limitations under the License.
// //   
// //   MODIFICATIONS HAVE BEEN MADE TO THIS FILE

using System;
using Comdiv.QWeb.Utils;

namespace Comdiv.QWeb {
	public class ActionAttribute : Attribute {
		public ActionAttribute(string name) {
			Name = name;
		}

		public string Name { get; set; }
		public string Role { get; set; }

		public string Help { get; set; }

		public static string GetName(Type type) {
			var attr = type.getFirstAttribute<ActionAttribute>();
			if (null == attr) {
				var result = type.Name.Replace("_", ".");
				if (result.EndsWith(".action")) {
					result = result.Substring(0, type.Name.Length - 7);
				}
				return result;
			}
			return attr.Name.ToLower();
		}

		public static string GetRole(IAction action) {
			if (action is ActionBase) return ((ActionBase) action).Role;
			var attr = action.GetType().getFirstAttribute<ActionAttribute>();
			var name = GetName(action.GetType()).Split('.');
			if (name.Length == 1) {
				name = new[] {name[0], "action"};
			}
			var rolessuffix = string.Format(",{0},{0}{1}", name[0].ToUpper(), name[1].ToUpper());
			if (null != attr) {
				return attr.Role + rolessuffix;
			}
			return "DEFAULT" + rolessuffix;
		}

		public static string GetHelp(IAction action) {
			var attr = action.GetType().getFirstAttribute<ActionAttribute>();
			if (null == attr) return "";
			return attr.Help ?? "";
		}
	}
}